const fp = require("lodash/fp")

// horsepower 马力，dollar_value 价格，in_stock 库存
const cars = [
  { name: "Ferrari FF", horsepower: 660, dollar_value: 700000, in_stock: true },
  { name: "Spyker C12 Zagato", horsepower: 650, dollar_value: 648000, in_stock: false },
  { name: "Jaguar XKR-S", horsepower: 550, dollar_value: 132000, in_stock: false },
  { name: "Audi R8", horsepower: 525, dollar_value: 114200, in_stock: false },
  { name: "Aston Martin One-77", horsepower: 750, dollar_value: 1850000, in_stock: true },
  { name: "Pagani Huayra", horsepower: 700, dollar_value: 1300000, in_stock: false },
]

// 1、fp.flowRight()重新实现
// let isLastInStock = function(cars) {
//   // 获取最后一条数据的 in_stock 属性值
//   let last_car = fp.last(cars)
//   return fp.prop("in_stock", last_car)
// }

const isLastInStock = fp.flowRight(fp.prop("in_stock"), fp.last)
console.log(isLastInStock(cars))


// 2、fp.flowRight()、fp.prop()、fp.first() 获取第一个car.name
const isFirstName = fp.flowRight(fp.prop("name"), fp.first)
console.log(isFirstName(cars))


// 3、使用函数组合
let _average = function(xs) {
  return fp.reduce(fp.add, 0, xs) / xs.length
}
let averageDollarValue = function(cars) {
  // let dollar_values = fp.map(function(car){
  //   return car.dollar_value
  // }, cars)
  // return _average(dollar_values)

  return _average(fp.map(car => car.dollar_value, cars))
}
console.log(averageDollarValue(cars))


// 4、使用 flowRight 写一个 sanitizeNames() 函数，返回一个下划线连接的小写字符串，
//    把数组中的 name 转换为 sanitizeNames(["Hello World"]) => ["hello_world"]
let _underscore = fp.replace(/\W+/g, "_")
const f = fp.flowRight(_underscore, fp.toLower)
console.log(f(["Hello World"]))